//2025/8/7
//java核心类1
//字符串
class Book{
    public int num ;
    Book(int num){
        this.num = num;
    }
    public void newBook(int num){
        this.num += num;
    }
}

public class Main {
    public static void main(String[] args) {
//1.String为一个对象，不可变！！！
    String hello = "hello";
        Book book = new Book(1);
        System.out.println("hello前"+hello.hashCode()+"  "+book.hashCode());
    hello = hello.toUpperCase();//*****注意，前面的hello和后面的Hello已经不是同一个对象了
        book.newBook(1);
        System.out.println(hello.hashCode());
    System.out.println("hello后"+hello.hashCode()+"  "+book.hashCode());

//2.字符串比较需要用equals()
        System.out.println("hello".equals(hello));
        System.out.println("HELLO".equals(hello));//同样的字符串会被划分为同一个类
        System.out.println("hello".equalsIgnoreCase(hello));//忽略大小写
        System.out.println(hello.toCharArray()[1]);
        //其他方法有很多见https://liaoxuefeng.com/books/java/oop/core/string-encoding/index.html
        //trim()方法可以移除字符串首尾空白字符
        //strip()方法也可以移除字符串首尾空白字符,中文的空格字符\u3000也会被移除
        //还有替换子串、分割、拼接、格式化
        //String.valueOf(int/double etc...) 转换为字符串

//3.String和char[]类型可以互相转换
        char[] cs = "Hello".toCharArray();
        String s = new String(cs);
        System.out.println(s);
        cs[0] = 'X';
        System.out.println(s);
//4.StringBuilder 它是一个可变对象,String是一个不可变对象
        StringBuilder sb = new StringBuilder("Hello");
        sb.append('X').append("b");
        System.out.println(sb.toString());
    }
//5.包装
// 基本类型：byte，short，int，long，boolean，float，double，char；
//引用类型：所有class和interface类型。
//引用类型可以赋值为null，表示空，但基本类型不能赋值为null：
//Integer是引用类型 必须使用equals()比较：  tip:9后Integer移除需要自己添加见Integer.java
Integer n = null;
    Integer n2 = new Integer(99);
    int n3 = n2.intValue();
}
/*
 基本类型	对应的引用类型
boolean	java.lang.Boolean
byte	java.lang.Byte
short	java.lang.Short
int	java.lang.Integer
long	java.lang.Long
float	java.lang.Float
double	java.lang.Double
char	java.lang.Character
*/
//所有的包装类型都是不变类